package pl.wroc.pwr.mss.server.ui.menu;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.List;

import javax.swing.JFileChooser;
import javax.swing.JMenuItem;

import org.apache.log4j.Logger;

import pl.wroc.pwr.mss.logic.domain.Playlist;
import pl.wroc.pwr.mss.logic.domain.Song;
import pl.wroc.pwr.mss.server.service.SongService;
import pl.wroc.pwr.mss.server.ui.dialogs.JPlaylistEditDialog;
import pl.wroc.pwr.mss.server.ui.filechoosers.JMp3FileChooser;
import pl.wroc.pwr.mss.server.ui.tables.JSongEditTable;
import pl.wroc.pwr.mss.server.ui.tables.models.SongEditTableModel;

/**
 * Pozycja w menu wyskakujacym sluzaca do dodawania nowych utworow do playlisty.
 * 
 * @author mjagus
 */
public class JCreateNewSongMenuItem extends JMenuItem implements ActionListener
{
    /**
     * Identyfikator klasy.
     */
    private static final long serialVersionUID = 4030819415592101388L;

    /**
     * Logger tej klasy.
     */
    private static final Logger log = Logger.getLogger(JCreateNewSongMenuItem.class);

    /**
     * Okno dialogowe edycji playlisty.
     */
    private JPlaylistEditDialog playlistEditDialog;

    /**
     * Tabela utworow znajdujaca sie w oknie dialogowym edycji playlisty.
     */
    private JSongEditTable songEditTable;

    /**
     * Okno dialogowe wyboru plikow o rozszerzeniu ".mp3".
     */
    private JMp3FileChooser mp3FileChooser;

    /**
     * Serwis dla encji Song.
     */
    private SongService songService;

    /**
     * Iniciuje komponent.
     */
    public JCreateNewSongMenuItem()
    {
        super("Add new songs");

        super.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        log.info("Opening mp3 file chooser");
        int option = mp3FileChooser.showOpenDialog(playlistEditDialog);
        log.info("Closing mp3 file chooser");

        if(option == JFileChooser.APPROVE_OPTION)
        {
            log.info("Files have been selected");
            File[] files = mp3FileChooser.getSelectedFiles();

            List<Song> songs = songService.createSongsForFiles(files);
            Playlist playlist = songEditTable.getPlaylist();
            playlist.getSongs().addAll(songs);

            SongEditTableModel songEditTableModel = (SongEditTableModel)songEditTable.getModel();
            songEditTableModel.fireTableDataChanged();
        }
    }

    /**
     * @return Okno dialogowe edycji playlisty
     */
    public JPlaylistEditDialog getPlaylistEditDialog()
    {
        return playlistEditDialog;
    }

    /**
     * @param playlistEditDialog Okno dialogowe edycji playlisty
     */
    public void setPlaylistEditDialog(JPlaylistEditDialog playlistEditDialog)
    {
        this.playlistEditDialog = playlistEditDialog;
    }

    /**
     * @return Tabela utworow znajdujaca sie w oknie dialogowym edycji playlisty
     */
    public JSongEditTable getSongEditTable()
    {
        return songEditTable;
    }

    /**
     * @param songEditTable Tabela utworow znajdujaca sie w oknie dialogowym
     * edycji playlisty
     */
    public void setSongEditTable(JSongEditTable songEditTable)
    {
        this.songEditTable = songEditTable;
    }

    /**
     * @return Okno dialogowe wyboru plikow o rozszerzeniu ".mp3"
     */
    public JMp3FileChooser getMp3FileChooser()
    {
        return mp3FileChooser;
    }

    /**
     * @param mp3FileChooser Okno dialogowe wyboru plikow o rozszerzeniu ".mp3"
     */
    public void setMp3FileChooser(JMp3FileChooser mp3FileChooser)
    {
        this.mp3FileChooser = mp3FileChooser;
    }

    /**
     * @return Serwis dla encji Song
     */
    public SongService getSongService()
    {
        return songService;
    }

    /**
     * @param songService Serwis dla encji Song
     */
    public void setSongService(SongService songService)
    {
        this.songService = songService;
    }
}
